<?php

namespace Develop\Tools;

class OrderNumber
{
    /**
     * 根据时间生成唯一订单号
     * @param $prefix string 前缀,大小写字母
     * author: lc
     * time: 2022/02/14
     */
    public static function createOrderNo(string $prefix = ''): string
    {
        # 年份, 2022之后过26年, 会出现bug,到时需要延伸年份数组长度
        $yearData = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
        $year = $yearData[intval(date('Y')) - 2022];
        # 月份
        $montyData = ['Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', 'A', 'S'];
        $month = $montyData[intval(date('m')) - 1];
        # 日期
        $dayData = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 1, 2, 3, 4, 5];
        $day = $dayData[intval(date('d')) - 1];
        # 小时
        $hourData = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X'];
        $hour = $hourData[intval(date('H'))];
        return strtoupper($prefix) . $year . $month . $day . $hour . date('is') . substr(microtime(), 2, 6) . sprintf('%02d', rand(0, 99));
    }
}